using System.Collections.Generic;
using System.Data.Linq.Mapping;
using System.IO;
using Company._4.Repository.Imp.Linq;
using Company.Model;
using Company.Model.Repository;
using System.Linq;
using StructureMap;
using Departamento = Company.Model.Departamento;
using Empresa = Company._4.Repository.Imp.Linq.Empresa;

namespace Company.Repository
{
    public class UsersRepository : IUsersRepository
    {
        private BD m_Bd;

        public UsersRepository()
        {
            m_Bd = ObjectFactory.GetInstance<BD>();
        }

        public IUsers GetUser(int id)
        {

            return GetAllLinq().Where(c => c.Id == id).FirstOrDefault();
        }

        public IUsers GetUser(string username)
        {
            return GetAllLinq().Where(c => c.UserName == username).FirstOrDefault();
        }

        private IQueryable<IUsers> GetAllLinq()
        {
            var a = (from u in m_Bd.Usuarios
                     join de in m_Bd.Departamentos on u.IdDepartamento equals de.IdDepartamento
                     join ni in m_Bd.Nivels on u.IdNivel equals ni.IdNivel
                     join em in m_Bd.Empresas on u.IdEmpresa equals em.IdEmpresa
                     select new Users()
                     {
                         Id = u.IdUsuario,
                         Password = u.Pass,
                         PasswordUltimoIntento = u.PassUltimoIntento,
                         PasswordPrev = u.PassPrev,
                         PasswordUltimoCambio = u.PassTiempo,
                         TotalAccesosSistema = u.TotalAccesos,
                         TotalPasswordIntentos = u.PassIntentos,
                         UltimoAcceso = u.PassUltimoIntento,
                         UserName = u.Username,
                         IdPersona = u.IdPersona,
                         Departamento = new Departamento()
                                            {
                                                IDDepartamento = u.IdDepartamento,
                                                DepartamentoNombre = de.Descripcion,
                                                Nivel = u.IdNivel,
                                                NivelDescripcion = ni.Descripcion
                                            },
                         EmpresaModel = new EmpresaModel()
                                       {
                                           IdEmpresa = em.IdEmpresa,
                                           Nombre = em.Nombre
                                       }
                     }).Cast<IUsers>();
            return a;
        }

        public IList<IDepartamento> fff()
        {
            var f = (from p in m_Bd.Departamentos
                     select new Departamento
                                {
                                    DepartamentoNombre = p.Descripcion,
                                    IDDepartamento = p.IdDepartamento
                                }).Cast<IDepartamento>().ToList();
            return f;
        }





    }
}